package 对称的二叉树;

public class Solution
{
    boolean isSymmetrical(TreeNode pRoot)
    {
        //对比对称二叉树的前序遍历，和非对称二叉树的前序遍历
        //发现前序遍历能够有效识别出是否是对称的二叉树
        //但不需要实现出前序排列后进行对比，有更巧妙的方法
        //把null考虑进去，可以分辨出节点的val全一样的二叉树
        return isSymmetrical(pRoot,pRoot);
    }
    boolean isSymmetrical(TreeNode pRoot1,TreeNode pRoot2)
    {
        //判断输入
        if (pRoot1==null&&pRoot2==null)return true;
        if (pRoot1==null||pRoot2==null)return false;
        if (pRoot1.val!=pRoot2.val)return false;
        return isSymmetrical(pRoot1.left,pRoot2.right)&&isSymmetrical(pRoot1.right,pRoot2.left);
        //p1的left和p2的right，如果对称，应该是相等的
        //看起来不是直接的对比前序遍历的结果，其实是一种简便的对比方法，直接在每一步对比根左右，和根右左
    }
}
